package com.adou.d10.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {

    public static Star createProxy(BigStar bigstar) {
        // 1.用于指定类加载器
        // 2.指定生产代理长什么样子，也就是有哪些方法
        // 3.用来指定代理对象要干什么
        // Star starProxy = ProxyUtil.createProxy(s);
        // starProxy.sing("好日子");
        // starProxy.dance("科目三");
        Star starProxy = (Star)Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),
                new Class[]{Star.class}, new InvocationHandler() {
                    @Override// 回调方法
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        // 参数1：调用类
                        // 参数2：调用方法
                        // 参数3 参与以object[]传进来

                        if(method.equals("sing")) {
                            System.out.println("准备话筒，收钱20万");
//                            return method.invoke(bigstar, args);
                        } else if (method.equals("dance")) {
                            System.out.println("准备场地，收钱30万");
//                            return method.invoke(bigstar, args);
                        } else {
//                            return method.invoke(bigstar, args);
                        }
                        return method.invoke(bigstar, args);
                    }
                });
        return starProxy;
    }

}
